package com.chixing.day16_io.reflect;




import java.lang.reflect.Field;
import java.lang.reflect.Method;

// 通过反射 判断proId 是否有get,set
public class ProductTest{
    public static void main(String[] args) {
        boolean result1 = ProductTest.hasGetMethod(Product.class,"getProId");
        //boolean result2 = hasSetMethod(Product.class,"setProId");
        System.out.println(result1);
        //System.out.println(result2);
    }
    public static boolean hasGetMethod(Class clazz,String fieldName){

/*//           1.获得字段 proId 的数据类型 int
//        Class<Product> productClass = Product.class;
        Method[] method = clazz.getDeclaredMethods();
        for (Method met:method) {
    //        System.out.println(met.getReturnType());
            Class<?>[] types = met.getParameterTypes(); //参数列表
            String type = null;
            for (Class<?> a:types) {
                type += a;
            }
            if(met.getName().equals(fieldName)&& type == null&& String.valueOf(met.getReturnType()).equals("int"))
                return true;
        }
//           2. Product 中找出 方法名为 "getProId" ,并且 参数列表是空的 null , 并且 返回值是int
//              若存在这样的方法结构，说明对应的get方法是存在的
//              否则就是不存在

        return false;*/
        Field field = null;
        try {
            field = clazz.getDeclaredField(fieldName);
        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        }
        Class<?> fieldType = field.getType();//int
        String methodName = "get"+String.valueOf(fieldName.charAt(0)).toUpperCase()+fieldName.substring(1);
        System.out.println("要比较的方法名称：" + methodName);

        Method method = null;
        try {
            method = clazz.getMethod("");
        } catch (NoSuchMethodException e) {
            System.out.println("没有该方法" + methodName);
            return false;
        }


        return method.getReturnType().equals(fieldType);
    }

    /*public static boolean hasSetMethod(Class clazz,String fieldName){
        Method[] method = clazz.getDeclaredMethods();

        for (Method met:method) {
            Class<?>[] types = met.getParameterTypes(); //参数列表
            String type = "";
            for (Class<?> a:types) {
                type += a;
            }
           // System.out.println(type);
            if(met.getName().equals(fieldName)&& type.equals("int")&& String.valueOf(met.getReturnType()).equals("void"))
                return true;
        }
        return false;
          *//*
           1.获得字段 proId 的数据类型 int
           2. Product 中找出 方法名为 "setProId" ,并且 参数列表的数据类型 int, 并且 返回值是 void
              若存在这样的方法结构，说明对应的set方法是存在的
              否则就是不存在
        *//*
    }*/
    static  class Product {
    private int  proId;
         public int getProId() {
         return proId;
         }
         public void setProId(int proId) {
         this.proId = proId;
         }

 }
}
